/*
 * @Author: xujiawei 
 * @Date: 2021-07-21 16:27:55 
 * @Last Modified by: xujiawei
 * @Last Modified time: 2021-07-23 15:42:22
 * 可接收拖拽物品的容器
 */

const { ccclass, property } = cc._decorator;

export interface IDragContainer {
    checkInContainer: (item: cc.Node, itemId: number)=>boolean,
    onItemMove?: (item: cc.Node, itemId: number)=>void,
}

@ccclass
export class DragContainer extends cc.Component implements IDragContainer {
    itemIDs: number [] = []; // 可接收的dragItem ids
    totalAccept: number = 1; // 可接收的item数量
    private _acceptCount: number = 0; // 已经拖放的item数量
    checkInContainer(item: cc.Node, itemId: number) {
        if (this._acceptCount == this.totalAccept) {
            return;
        }

        if (this.itemIDs.indexOf(itemId) < 0) {
            return false;
        }
        
        // 判断item的中心点是不是已经在容器内
        // mark: 这里暂时不考虑item有缩放
        // 此时锚点不一定是中心
        let pos = item.getPosition(); 
        // 转成左下角坐标
        pos = cc.v2(pos.x - item.width * item.anchorX, pos.y - item.height * item.anchorY);
        // 转成item中心坐标
        pos = cc.v2(pos.x + item.width * 0.5, pos.y + item.height * 0.5);
        pos = item.parent.convertToWorldSpaceAR(pos);
        pos = this.node.parent.convertToNodeSpaceAR(pos);
        if (this.node.getBoundingBox().contains(pos)) {
            item.parent = this.node;
            item.x =item.y = 0;
            this._acceptCount ++;
            return true;
        }
        return false;
    }

    // todo: 子类可以重载，比如发现重合了就变色处理。
    onItemMove(item: cc.Node, itemId: number) {

    }
}